package com.talkweb.demo.search;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author wangshaopeng@talkweb.com.cn
 * @desccription 在此输入描述
 * @date 2024/10/10
 */
public class TxtModify {
    private final static Logger log = LoggerFactory.getLogger(TxtModify.class);

    private static String txt = null;
    private static String target = null;

    public static void search(Scanner scanner) {
        params(scanner);
        File txtFile = new File(txt);
        File[] files = txtFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            log.info("开始处理第[" + (i + 1) + "/" + files.length + "]个文件:" + file);
            if (file.isFile() && file.getName().endsWith(".txt")) {
                begin(file);
            } else {
                log.error("不处理目录和非.txt文件：" + file.getAbsolutePath());
            }
        }
    }

    private static void params(Scanner scanner) {
        while (null == txt) {
            System.out.print("OCR后生成的txt目录：");
            String input = scanner.nextLine();
            if (StrUtil.isNotBlank(input)) {
                input = input.trim();
                File file = new File(input);
                if (file.exists()) {
                    if (file.isDirectory()) {
                        txt = input;
                    } else {
                        System.err.println("！！必须是目录，不能直接指定文件！！");
                    }
                }
            }
        }

        while (null == target) {
            System.out.print("规范化后txt存储目录：");
            String input = scanner.nextLine();
            if (StrUtil.isNotBlank(input)) {
                input = input.trim();
                if (input.equalsIgnoreCase(txt)) {
                    System.err.println("！！源目录不能与规范化后存储目录相同！！");
                } else {
                    target = input;
                }
            }
        }

        System.out.println("=======================================================");
        System.out.println("OCR后生成的txt目录：" + txt);
        System.out.println("规范化后txt存储目录：" + target);
        System.out.println("=======================================================");

        System.out.print("是否确认开始（y/n）[y]：");
        String input = scanner.nextLine();
        scanner.close();
        if (StrUtil.isNotBlank(input) && !"y".equalsIgnoreCase(input)) {
            System.exit(0);
        }
    }

    private static void begin(File txtFile) {
        String sourceFileAbsolutePath = txtFile.getAbsolutePath();
        if (FileCacheUtil.exists(sourceFileAbsolutePath)) {
            log.info("==== 已处理过的文件，不重复处理:" + sourceFileAbsolutePath + " ====");
            return;
        }
        List<String> lines = FileUtil.readUtf8Lines(txtFile);
        List<String> modifyLines = new ArrayList<>(lines.size());
        // 从第2行开始，第1行是OCR时间戳，不需要
        for (int i = 1; i < lines.size(); i++) {
            String line = lines.get(i).trim();
            if (StrUtil.isNotBlank(line) && !line.startsWith("≦")) {
                modifyLines.add(line);
            }
        }
        String realName = txtFile.getName().split("_")[1];
        File targetFile = new File(target + File.separator + realName + ".txt");
        if (targetFile.exists()) {
            log.error("目标路径已存在，不做任何操作：" + targetFile.getAbsolutePath());
            return;
        }
        targetFile.getParentFile().mkdirs();
        FileUtil.writeUtf8Lines(modifyLines, targetFile);
        log.info(" =================处理完成：" + targetFile.getAbsolutePath());
        FileCacheUtil.cache(sourceFileAbsolutePath);
    }
}
